package sim.utils.GenVarAle;

/**
 * Genera valores que responden a una <b>Variable Exponencial Negativa</b> con
 * un valor de <i>media</i> pasado por parámetro.
 * 
 * @author alejandro
 * 
 */
public class VGExpNeg extends VariableGenerator {

	private double media;

	/**
	 * Constructor con parámetros. Se debe pasar la media de la variable.<br>
	 * La media debe ser un valor de la forma [cant. de eventos] / [intervalo de
	 * tiempo].<br>
	 * Ejemplos:
	 * <ul>
	 * <li>1 persona cada 5 minutos [1/5]</li>
	 * <li>3 vehículos por hora [3/1] (en horas) o [3/60] (en minutos)</li>
	 * <li>5 aviones cada 2 dias [5/2] (en dias), [5/48] (en horas) o [5/2880]
	 * (en minutos)</li>
	 * </ul>
	 * 
	 * @param media
	 *            La Media (λ) de la distribución exponencial negativa.
	 */
	public VGExpNeg(double media) {
		super();
		this.media = media;
	}

	@Override
	protected double generarValor() {
		double rnd = super.randomGenerator.next();
		super.lastRandom = rnd;
		//double valor = (-1 / this.media) * Math.log(1 - rnd);
		
		double paso1 =  (-1 / this.media);
		double paso2 =   Math.log(1 - rnd);
		double valor = paso1 * paso2;
		
		return valor;
	}

}
